package com.solomon.travel.common.util;

import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;


public class AESUtil {
	/** 
     * 加密 
    *  
     * @param content 需要加密的内容 
    * @param password  加密密码 
    * @return 
     */   
    public static byte[] encrypt(String content, String password) {   
            try {              
                    KeyGenerator kgen = KeyGenerator.getInstance("AES");   
                    kgen.init(128, new SecureRandom(password.getBytes()));   
                    SecretKey secretKey = kgen.generateKey();   
                    byte[] enCodeFormat = secretKey.getEncoded();   
                    SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");   
                    Cipher cipher = Cipher.getInstance("AES");// 创建密码器   
                    byte[] byteContent = content.getBytes("utf-8");   
                    cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化   
                    byte[] result = cipher.doFinal(byteContent);   
                    return result; // 加密   
            } catch (Exception e) {   
                    e.printStackTrace();   
            }   
            return null;   
    }   
      
    /**解密 
     * @param content  待解密内容 
     * @param password 解密密钥 
     * @return 
      */   
     public static byte[] decrypt(byte[] content, String password) {   
             try {   
                      KeyGenerator kgen = KeyGenerator.getInstance("AES");   
                      kgen.init(128, new SecureRandom(password.getBytes()));   
                      SecretKey secretKey = kgen.generateKey();   
                      byte[] enCodeFormat = secretKey.getEncoded();   
                      SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");               
                      Cipher cipher = Cipher.getInstance("AES");// 创建密码器   
                     cipher.init(Cipher.DECRYPT_MODE, key);// 初始化   
                     byte[] result = cipher.doFinal(content);   
                     return result; // 加密   
             } catch (Exception e) {   
                     e.printStackTrace();   
             }   
             return null;   
     }  
       
       
     /**将二进制转换成16进制 
      * @param buf 
       * @return 
       */   
//      public static String parseByte2HexStr(byte buf[]) {   
//              StringBuffer sb = new StringBuffer();   
//              for (int i = 0; i < buf.length; i++) {   
//                      String hex = Integer.toHexString(buf[i] & 0xFF);   
//                      if (hex.length() == 1) {   
//                              hex = '0' + hex;   
//                      }   
//                      sb.append(hex.toUpperCase());   
//              }   
//              return sb.toString();   
//      }   
        
      /**将16进制转换为二进制 
       * @param hexStr 
        * @return 
        */   
//       public static byte[] parseHexStr2Byte(String hexStr) {   
//               if (hexStr.length() < 1)   
//                       return null;   
//               byte[] result = new byte[hexStr.length()/2];   
//               for (int i = 0;i< hexStr.length()/2; i++) {   
//                       int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);   
//                       int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);   
//                       result[i] = (byte) (high * 16 + low);   
//               }   
//               return result;   
//       }   
         
       /** 
          * 加密 
         * 
          * @param content 需要加密的内容 
         * @param password  加密密码 
         * @return 
          */   
//         public static byte[] encrypt2(String content, String password) {   
//                 try {   
//                         SecretKeySpec key = new SecretKeySpec(password.getBytes(), "AES");   
//                         Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");   
//                         byte[] byteContent = content.getBytes("utf-8");   
//                         cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化   
//                         byte[] result = cipher.doFinal(byteContent);   
//                         return result; // 加密   
//                 } catch (Exception e) {   
//                         e.printStackTrace();   
//                 }   
//                 return null;   
//         }   
         
         public static void main(String[] args) {
			/*String token = IdUtils.uuid();
			String key = IdUtils.uuid().substring(16);
			System.out.println("token:"+token);
			System.out.println("key:"+key);
			byte[] miwenByte = encrypt(token, key);
			//String miwen = new Base64().encodeToString(miwenByte);
			String miwen = Base64.encodeBase64String(miwenByte);
			System.out.println("miwen:"+miwen);
			//byte[] mingwenByte = decrypt(new Base64().decode(miwen), key);
			byte[] mingwenByte = decrypt(Base64.decodeBase64(miwen), key);
			String mingwen = new String(mingwenByte);
			System.out.println("mingwen:"+mingwen);*/
        	/*Date date = new Date();
        	System.out.println(date.getTime());
        	System.out.println(System.currentTimeMillis());*/
        	 String value = IdUtils.MD5("lasfjSystem.out.println(System.currentTimeMillis());");
        	 System.out.println(value);
        	 System.out.println(value.substring(7, 23));
		}
}
